// axios
/*
1:下载axios
2:导入axios
3:创建axios副本(基地址处理)
4:添加请求拦截与响应拦截
5:暴露出去
6:src/api/模块名.js
7:导入与调用处理

开发环境   npm run serve
   .env.development
       以 VUE_APP_开头
       例如:  VUE_APP_URL ='123'
       process.env.VUE_APP_URL
生产环境  npm run build
   .env.production
       以 VUE_APP_开头
       例如:  VUE_APP_URL ='123'
       process.env.VUE_APP_URL
自定义环境变量
   .env.test
       以 VUE_APP_开头
       例如:  VUE_APP_URL ='123'
       process.env.VUE_APP_URL
   配制package.json     --mode test
     "xxx": "vue-cli-service build --mode test",
*/
import axios from 'axios'

const request = axios.create({
  baseURL: process.env.VUE_APP_URL
})
let cancelFn = []
request.interceptors.request.use((config) => {
  // 统一参数的添加  token
  // 所有接口都加下参数  lang=en
  config.url += '?lang=en'
  // 上一次同一接口请求取消掉
  cancelFn = cancelFn.filter(item => {
    if (item.url === config.url && item.method === config.method) {
      item.cancel()
      return false
    }
    return true
  })

  // 先存储所有接口取消方法
  config.cancelToken = new axios.CancelToken((cancel) => {
    cancelFn.push({
      cancel: cancel,
      url: config.url,
      method: config.method
    })
    console.log(cancelFn)
  })

  return config
}, (error) => {
  return Promise.reject(error)
})
request.interceptors.response.use((res) => {
  return res
}, (error) => {
  return Promise.reject(error)
})
export default request

const cancelAll = () => {
  cancelFn = cancelFn.filter(item => {
    item.cancel()
    return false
  })
}

export { cancelAll }
